/**
 * 缓存管理服务 - 提供统一的缓存操作接口和缓存清理功能
 *
 * 开发人员：徐少洋
 * 开发时间：2025-10-20 至 2025-10-25
 * 模块职责：提供系统缓存的统一管理接口，支持缓存清理、刷新等操作，优化系统性能
 *
 * 技术要点：
 * - Spring Cache抽象接口封装
 * - 多级缓存清理策略设计
 * - 业务模块缓存分组管理
 * - 缓存失效和刷新机制
 * - 性能监控和缓存命中率统计
 *
 * 开发故事：负责缓存管理服务的设计和实现，与缓存配置和业务服务深度配合，为系统提供高效的缓存管理能力和性能优化。
 */
package com.pbl.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.CacheManager;
import org.springframework.stereotype.Service;

/**
 * 缓存管理服务 - 提供统一的缓存操作接口和缓存清理功能
 * 支持按模块清理缓存，提高缓存管理的灵活性和效率
 */
@Service
public class CacheService {

    @Autowired
    private CacheManager cacheManager;

    /**
     * 清除指定缓存空间
     * @param cacheName 缓存名称
     */
    public void evictCache(String cacheName) {
        if (cacheManager.getCache(cacheName) != null) {
            cacheManager.getCache(cacheName).clear();
        }
    }

    /**
     * 清除指定缓存中的特定键值
     * @param cacheName 缓存名称
     * @param key 缓存键
     */
    public void evictCache(String cacheName, String key) {
        if (cacheManager.getCache(cacheName) != null) {
            cacheManager.getCache(cacheName).evict(key);
        }
    }

    /**
     * 清除所有产品相关缓存
     * 包括产品列表、详情、搜索等缓存空间
     */
    public void evictProductCaches() {
        evictCache("products:list");
        evictCache("products:detail");
        evictCache("products:code");
        evictCache("products:search");
        evictCache("products:category");
    }

    /**
     * 清除仪表板相关缓存
     * 包括统计指标等缓存空间
     */
    public void evictDashboardCaches() {
        evictCache("dashboard:metrics");
    }

    /**
     * 清除所有系统缓存
     * 适用于系统重启或重大配置变更场景
     */
    public void evictAllCaches() {
        cacheManager.getCacheNames().forEach(this::evictCache);
    }
}
